/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ModuloConfiguracion;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;


import Modelo.DAL.Implemento_DAO;
import Modelo.Implemento;
import java.io.PrintWriter;
import org.json.JSONObject;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMessage;
import Acceso.Security;
import org.json.JSONArray;

/**
 *
 * @author h-m
 */
public class modificarImplementoAction extends org.apache.struts.action.Action {

    /* forward name="success" path="" */
    private static final String SUCCESS = "success";
    private static final String FAILURE = "failure";
    private static final String[] ALLOWED = {"Administrador"};

    /**
     * This is the action called from the Struts framework.
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @throws java.lang.Exception
     * @return
     */
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        String[] a = {"Administrador", "Director DSI"};
        if (!Security.validateSession(request, ALLOWED)) {
            Security.privilegeError(response);
            return mapping.findForward("errorPriv");
        }

        modificarImplementoForm formBean = (modificarImplementoForm) form;
        System.out.println("ENTRA");
        // Necesario para llenar le formulario
        String flag = request.getParameter("flag");
        if ((flag != null) && flag.equals("ida")) {
            System.out.println("entro en el flag ida");
            String id_implemento = formBean.getId_implemento();
            String select = "Select *, (select count (*) from implemento) from implemento where id_implemento = " + id_implemento;

            response.setContentType("text/json");
            JSONArray implemento = Implemento_DAO.consultarImplemento(select);
            System.out.println("\n\nImplemento Ida mostrar = " + implemento);

            if (implemento == null) {
                return mapping.findForward(FAILURE);
            }
            JSONObject ext = new JSONObject();
            ext.put("modificarImplementoIda", implemento);
            PrintWriter pw = response.getWriter();
            pw.write(ext.toString());
            pw.flush();
            pw.close();
            formBean.setError("");
            formBean.setSubmit("");
            formBean.setReset("");
            return mapping.findForward(FAILURE);
        }
        // Necesario para llenar le formulario

        // Necesario para modificar el objeto
        String submit = formBean.getSubmit();
        System.out.println("submit = " + submit);
        if ((submit != null) && submit.equals("submit")) {


            System.out.println("Entra Submit");
            // Necesario para resetear el formulario
            String reset = formBean.getReset();
            if ((reset != null) && reset.equals("si")) {
                System.out.println("RESETEAR!!!!!");
                formBean.reset(mapping, request);
                formBean.setError("");
                formBean.setSubmit("");
                formBean.setReset("");
                return mapping.findForward(FAILURE);
            }
            formBean.setReset("si");
            // Necesario para resetear el formulario

            System.out.println("entro en el flag submit");
            String idImplemento = formBean.getId_implemento();
            String nombre = formBean.getNombre();
            String subtipo = formBean.getSubtipo();
            String marca = formBean.getMarca();
            int calificacion = formBean.getCalificacion();
            String status = formBean.getStatus();
            String duracionEstimada = formBean.getDuracionEstimada();
            String duracionReal = formBean.getDuracionReal();
            String caracteristicasAdicionales = formBean.getCaracteristicasAdicionales();
            String frecuenciaDeUso = formBean.getFrecuenciaDeUso();
            ActionErrors errors = new ActionErrors();
            boolean error = false;


            //Verificaciones del formulario de implemento
            if (nombre == null || nombre.equals("")) {
                errors.add("tipo_imp_requerido", new ActionMessage("errors.tipo_imp_requerido"));
                saveErrors(request, errors);
                error = true;
            }
            if (subtipo == null || subtipo.equals("")) {
                errors.add("subtipo_imp_requerido", new ActionMessage("errors.subtipo_imp_requerido"));
                saveErrors(request, errors);
                error = true;
            }
            if (marca == null || marca.equals("")) {
                errors.add("marca_imp_requerido", new ActionMessage("errors.marca_imp_requerido"));
                saveErrors(request, errors);
                error = true;
            }
            if (status == null || status.equals("")) {
                errors.add("estado_imp_requerido", new ActionMessage("errors.estado_imp_requerido"));
                saveErrors(request, errors);
                error = true;
            }
            if (duracionEstimada == null || duracionEstimada.equals("")) {
                errors.add("durEst_imp_requerido", new ActionMessage("errors.durEst_imp_requerido"));
                saveErrors(request, errors);
                error = true;
            }
            if (calificacion == -1) {
                errors.add("calificacion_imp_requerido", new ActionMessage("errors.calificacion_imp_requerido"));
                saveErrors(request, errors);
                error = true;
            }
            if (error) {
                formBean.setSubmit("");
                formBean.setReset("");
                return mapping.findForward(FAILURE);
            }
//********************************************************************************

            Implemento imp = new Implemento();
            imp.setId_implemento(idImplemento);
            imp.setNombre(nombre);
            imp.setSubtipo(subtipo);
            imp.setMarca(marca);
            imp.setCalificacion(calificacion);
            imp.setStatus(status);
            imp.setDuracionEstimada(duracionEstimada);
            imp.setDuracionReal(duracionReal);
            imp.setCaracteristicasAdicionales(caracteristicasAdicionales);
            imp.setFrecuenciaDeUso(frecuenciaDeUso);

            if (Modelo.DAL.Implemento_DAO.actualizarImplemento(imp)) {
                formBean.reset(mapping, request);
                formBean.setSubmit("");
                formBean.setReset("");
                return mapping.findForward(SUCCESS);
            } else {
//                formBean.setError("Ha ocurrido un error en la base de datos y"
//                        + " no se pudo modificar el Implemento.");
                System.out.println(" a ocurrido un error en la base de datos y"
                        + " no se pudo modificar el Implemento.");
                formBean.setSubmit("");
                formBean.setReset("");
                errors.add("act_imp_fallido", new ActionMessage("errors.act_imp_fallido"));
                saveErrors(request, errors);
                return mapping.findForward(FAILURE);
            }
        }

        //  Necesario para la primera ejecucion de la pagina y guardar el id del objeto
        String id_implemento_ida = request.getParameter("id_implemento");
        System.out.println("\n\n id_implemento_ida = " + id_implemento_ida + "\n\n");
        formBean.setId_implemento(id_implemento_ida);
        formBean.setSubmit("");
        formBean.setReset("");
        return mapping.findForward(FAILURE);
        //  Necesario para la primera ejecucion de la pagina y guardar el id del objeto
    }
}
